﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using V = Science.Mathematics.VectorCalculus;

namespace VectorCalculus5Ed.Chapter3.Section4
{
    public class Example03
    {
        public Example03()
		{
		}
		private string result;
		public string Result
		{
			get{return result;}
		}
        public void Compute()
        {
            V.Function.ToLastType<double[], double> f
                = new V.Function.ToLastType<double[], double>(func);
            V.Function.ToLastType<double[], double[]> g
                = new V.Function.ToLastType<double[], double[]>(gf);
            double[] x = { 1.0, 1.0,1.0};
            double[] l = { 0.1 };
            V.LagrangeMultiplierMethod obj
                = new V.LagrangeMultiplierMethod(f, g, x, l);
            obj.Compute();
            result += obj.CriticalPoint[0].ToString() + "\r\n";
            result += obj.CriticalPoint[1].ToString() + "\r\n";
            result += obj.CriticalPoint[2].ToString() + "\r\n";
            result += obj.LagrangeMultiplier[0].ToString() + "\r\n";
        }
        private double func(double[] x)
        {
            return x[0] + x[2];
        }
        private double[] gf(double[] x)
        {
            double[] y = new double[1];
            y[0] = x[0] * x[0] + x[1] * x[1] + x[2] * x[2] - 1.0;
            return y;
        }
    }
}
/*
0.707110137733097
5.55462219186602E-07
0.707103552318579
0.707117839568503
*/